package com.ms.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ms.entity.Game;
import com.ms.entity.Organizer;
import com.ms.service.inter.GameService;
import com.ms.utils.UserContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/game")
public class GameController {

    @Autowired
    private GameService gameService;

    /**
     * 1. 所有人都可以查询所有比赛的方法
     * @return 所有比赛列表
     */
    @GetMapping("/list")
    public List<Game> listAllGames() {
        return gameService.list();
    }

    /**
     * 2. 主办方查询属于自己的比赛方法
     * @return 属于当前主办方的比赛列表
     */
    //测试路径：localhost:8080/game/getCurrentGame
    @GetMapping("/getCurrentGame")
    public List<Game> listMyGames() {
        Organizer organizer = UserContext.getOrganizer();
        if (organizer == null) {
            throw new RuntimeException("请使用主办方账号登录");
        }

        QueryWrapper<Game> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("or_id", organizer.getOrId());
        return gameService.list(queryWrapper);
    }



    /**
     * 3. 主办方可以对自己的比赛补充相关信息的方法
     * @param game 包含更新信息的游戏对象
     * @return 更新结果
     */
    @PutMapping("/updateGameInfo")
    public boolean updateGameInfo(@RequestBody Game game) {
        // 检查是否是主办方
        Organizer organizer = UserContext.getOrganizer();
        if (organizer == null) {
            throw new RuntimeException("请使用主办方账号登录");
        }

        // 确保主办方只能更新自己的比赛
        QueryWrapper<Game> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("games_id", game.getGamesId());
        queryWrapper.eq("or_id", organizer.getOrId());
        
        Game existingGame = gameService.getOne(queryWrapper);
        if (existingGame == null) {
            throw new RuntimeException("您无权更新此比赛信息");
        }

        // 更新时间字段
        game.setCreateTime(new Date());

        // 更新游戏信息
        return gameService.updateById(game);
    }


    /**
     * 根据ID查询比赛详情
     * @param id 比赛ID
     * @return 比赛详情
     */
    @GetMapping("/detail")
    public Game getGameById(@RequestParam Integer id) {
        return gameService.getById(id);
    }

    
    /**
     * 管理员删除比赛
     * @param id 比赛ID
     * @return 删除结果
     */
    @DeleteMapping("/delete")
    public boolean deleteGame(@RequestParam Integer id) {
        if (UserContext.getManager() == null) {
            throw new RuntimeException("请使用管理员账号登录");
        }
        
        return gameService.removeById(id);
    }
}